package com.hspedu.set_;

import java.util.LinkedHashSet;
import java.util.Set;

/**
 * @author LiuJinTao
 * @className LinkedHashSet
 * @date 2024/06/07 17:21
 * @description LinkedHashSet底层机制
 */
@SuppressWarnings({"all"})
public class LinkedHashSetSource {
    public static void main(String[] args) {
        Set set = new LinkedHashSet();
        set.add(new String("AA"));
        set.add(456);
        set.add(456);
        set.add(new Customer("刘", 1001));
        set.add(123);
        set.add("HSP");

        System.out.println("set=" + set);
        // LinkedHashSet 加入顺序和取出顺序一样
        // LinkedHashSet 底层维护是 LinkedHashMap(HashMap的子类)
        // LinkedHashSet 底层结果是 数组 tab + 双向链表
        // 添加都一个元素时，直接将 数组tab 扩容到16，存放的结点是 LinkedHashMap.Entry
        // 数组是 HashMap.Node[] , 存放的元素是 LinkedHashMap.Entry 类型
        // 多态 向上转型 LinkedHashMap.Entry 继承 HashMap.Node
    }
}

class Customer {
    private String name;
    private int number;

    public Customer(String name, int number) {
        this.name = name;
        this.number = number;
    }

    @Override
    public String toString() {
        return "Customer{" +
                "name='" + name + '\'' +
                ", number=" + number +
                '}';
    }
}